package com.ruoyi.system.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.system.domain.UserTaskLike;
import com.ruoyi.system.mapper.UserTaskLikeMapper;
import com.ruoyi.system.service.IUserTaskLikeService;
import com.ruoyi.system.mapper.TaskInfoMapper;
import com.ruoyi.system.domain.TaskInfo;

/**
 * 用户任务点赞/关注Service业务层处理
 *
 * @author ruoyi
 * @date 2024-07-03
 */
@Service
public class UserTaskLikeServiceImpl implements IUserTaskLikeService
{
    @Autowired
    private UserTaskLikeMapper userTaskLikeMapper;

    @Autowired
    private TaskInfoMapper taskInfoMapper;

    /**
     * 查询用户任务点赞/关注
     *
     * @param id 用户任务点赞/关注主键
     * @return 用户任务点赞/关注
     */
    @Override
    public UserTaskLike selectUserTaskLikeById(Long id)
    {
        return userTaskLikeMapper.selectUserTaskLikeById(id);
    }

    /**
     * 查询用户任务点赞/关注列表
     *
     * @param userTaskLike 用户任务点赞/关注
     * @return 用户任务点赞/关注
     */
    @Override
    public List<UserTaskLike> selectUserTaskLikeList(UserTaskLike userTaskLike)
    {
        return userTaskLikeMapper.selectUserTaskLikeList(userTaskLike);
    }

    /**
     * 新增用户任务点赞/关注
     *
     * @param userTaskLike 用户任务点赞/关注
     * @return 结果
     */
    @Override
    public int insertUserTaskLike(UserTaskLike userTaskLike)
    {
        return userTaskLikeMapper.insertUserTaskLike(userTaskLike);
    }

    /**
     * 修改用户任务点赞/关注
     *
     * @param userTaskLike 用户任务点赞/关注
     * @return 结果
     */
    @Override
    public int updateUserTaskLike(UserTaskLike userTaskLike)
    {
        return userTaskLikeMapper.updateUserTaskLike(userTaskLike);
    }

    /**
     * 批量删除用户任务点赞/关注
     *
     * @param ids 需要删除的用户任务点赞/关注主键
     * @return 结果
     */
    @Override
    public int deleteUserTaskLikeByIds(Long[] ids)
    {
        return userTaskLikeMapper.deleteUserTaskLikeByIds(ids);
    }

    /**
     * 删除用户任务点赞/关注信息
     *
     * @param id 用户任务点赞/关注主键
     * @return 结果
     */
    @Override
    public int deleteUserTaskLikeById(Long id)
    {
        return userTaskLikeMapper.deleteUserTaskLikeById(id);
    }

    /**
     * 切换任务点赞状态（点赞/取消点赞）
     *
     * @param userId 用户ID
     * @param taskId 任务ID
     * @return 结果（1点赞，0取消点赞）
     */
    @Override
    @Transactional
    public int toggleTaskLike(Long userId, Long taskId) {
        UserTaskLike queryLike = new UserTaskLike();
        queryLike.setUserId(userId);
        queryLike.setTaskId(taskId);

        UserTaskLike existingLike = userTaskLikeMapper.checkUserLikedTask(queryLike);
        int result;

        if (existingLike != null) {
            // 已点赞，执行取消点赞操作
            userTaskLikeMapper.deleteUserTaskLikeById(existingLike.getId());
            // 任务点赞数减一
            TaskInfo taskInfo = taskInfoMapper.selectTaskInfoById(taskId);
            if (taskInfo != null && taskInfo.getLikeCount() != null) {
                taskInfo.setLikeCount(taskInfo.getLikeCount() - 1);
                taskInfoMapper.updateTaskInfo(taskInfo);
            }
            result = 0; // 取消点赞
        } else {
            // 未点赞，执行点赞操作
            UserTaskLike newLike = new UserTaskLike();
            newLike.setUserId(userId);
            newLike.setTaskId(taskId);
            userTaskLikeMapper.insertUserTaskLike(newLike);
            // 任务点赞数加一
            TaskInfo taskInfo = taskInfoMapper.selectTaskInfoById(taskId);
            if (taskInfo != null) {
                taskInfo.setLikeCount(taskInfo.getLikeCount() == null ? 1 : taskInfo.getLikeCount() + 1);
                taskInfoMapper.updateTaskInfo(taskInfo);
            }
            result = 1; // 点赞成功
        }
        return result;
    }

    /**
     * 检查用户是否已点赞某个任务
     *
     * @param userId 用户ID
     * @param taskId 任务ID
     * @return true已点赞，false未点赞
     */
    @Override
    public boolean checkUserLikedTask(Long userId, Long taskId) {
        UserTaskLike queryLike = new UserTaskLike();
        queryLike.setUserId(userId);
        queryLike.setTaskId(taskId);
        return userTaskLikeMapper.checkUserLikedTask(queryLike) != null;
    }
} 